package com.qfedu.common.utils;

/**
 * 2024/12/27 下午3:05
 *
 * @author Dang.M.H
 */
/**
 * UserUtil类提供了线程安全的用户ID存储和访问方法
 * 它使用ThreadLocal来确保每个线程都有自己独立的用户ID副本，从而避免共享变量带来的线程安全问题
 */
public class UserUtil {

    // 使用ThreadLocal存储用户ID，每个线程都有自己独立的副本
    private static final ThreadLocal<Integer> USER_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 设置当前线程的用户ID
     *
     * @param uid 用户ID
     */
    public static void setUid(Integer uid) {
        USER_THREAD_LOCAL.set(uid);
    }

    /**
     * 获取当前线程的用户ID
     *
     * @return 当前线程的用户ID，如果未设置则返回null
     */
    public static Integer getUid() {
        return USER_THREAD_LOCAL.get();
    }

    /**
     * 移除当前线程的用户ID
     * 这是为了避免内存泄漏，特别是在长期运行的线程中
     * 或者当线程任务完成后，确保用户ID被正确清理
     */
    public static void remove() {
        USER_THREAD_LOCAL.remove();
    }
}

